#ifndef RAMPS_H
#define RAMPS_H

/** ------------------------------------------------------------------------
 * 	Arquivo: ramps.h
 *	Neste arquivo esta definida a classe de rampas de Temperatura.
 *	As rampas de temperatura devem ser usadas para controlar a brassagem
 *  	utilizando sensores do tipo Dallas.
 *	Autores:
 *	Luis "Viadao" Ramalho: luispedrojr@gmail.com
 *	Pedro "Pirocudo" Cambier: pedrocambier@gmail.com
 *	Picocervejaria Flauzue
 *	Criado em: 14/10/2013
 *	Viu como ficou bonitinho meu cabecalho??
 *	Cabecalho no teu cu eh rola!
 * -------------------------------------------------------------------------
 */


#define MAXRAMPS 10

typedef struct ramp
{
	float _tempInit; // Temperatura inicial da rampa
	float _tempFinish;   // Temperatura final da rampa
	float _duration;    // Tempo Total da rampa
} ramp;

// Rampa de Temperatura
class Ramps
{
private:

	float _hister;	// Histerese para ajuste de temperatura
	float _initTime;	// Tempo inicial das rampas
	ramp _ramps[MAXRAMPS];	// Array de rampas
	unsigned char _nramps;	// Numero de rampas ativas no array

private:
/**
 * Utilitarios
 */
	// Recupera a temperatura que deveria estar no tempo dado
	// Retorna false em caso de erro
	bool _getSetPoint(float time, float &setpoint);
public:
/**
 * Constutores
 */
	// Construtor, recebe histerese 
	Ramps(float hister = 0.1);

	// Destrutor
	~Ramps()
	{}

/**
 * Modificadores
 */
	// Modifica o valor de histerese
	void HisterSet(float hister) { _hister = hister; }

	// Modifica o tempo inicial da rampa
	void Start(float init) { _initTime = init; }

	// Modifica o tempo inicial da rampa sem parametro
	void Start() {_initTime = 0.0;}

	// Adiciona rampa de temperatura
	bool AddRamp(float tempInit, float tempFinish, float duration);

/**
 * Acessores
 */

/**
 * Utilitarios
 */
	// Verifica se precisa aumentar a temperatura
	// Recebe temperatura lida e tempo corrente e retorna 1 para aumentar temperatura
	// 0 para desligar a fonte de calor e -1 caso ocorra algum erro
	char RiseTemp(float time, float temperature);
};

#endif // RAMPS_H
